//
//  ACHFlowLayout.m
//  MansApp
//
//  Created by lanou3g on 15/7/17.
//  Copyright (c) 2015年 ACH. All rights reserved.
//

#import "ACHFlowLayout.h"
static const CGFloat ACHItemW = 200;
static const CGFloat ACHItemH = 100;
@implementation ACHFlowLayout

- (instancetype)init{
    
    if (self = [super init]) {
        
    }
    return self;
}

// 只要显示的边界发生改变就重新布局
// 内部会重新调用prepareLayout 和layoutAttributesForElementsInRect 方法 获得所有cell 的布局属性

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{
    
    return YES;
}
// 一些初始化工作最好在这里实现
- (void)prepareLayout{
    
    [super prepareLayout];
    //每个cell 的尺寸
    self.itemSize = CGSizeMake(ACHItemW, ACHItemH);
    CGFloat inset= (self.collectionView.frame.size.height - 100)* 0.5;
    self.sectionInset = UIEdgeInsetsMake(inset,0 , inset,0);
    self.minimumLineSpacing = 100;
    self.minimumInteritemSpacing = 100;
//    self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    
}


// 有效距离:当item 的中间X距离 屏幕的中间x 在 ** 以内 ,才会开始方法,其他情况都会缩小;

// 缩放因素 : 值越大 item 就会越大


- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{
     // 计算课件的矩形框
    CGRect  visiableRect;
    visiableRect.size = self.collectionView.frame.size;
    visiableRect.origin = self.collectionView.contentOffset;
    
    // 取得默认的cell 的UICollectionViewLayoutAttributes
    NSArray *array = [super layoutAttributesForElementsInRect:rect];
    
    // 计算 屏幕最中间的x;
   // CGFloat centerX = self.collectionView.contentOffset.x + self.collectionView.frame.size.width * 0.5;
    CGFloat centerY = self.collectionView.contentOffset.y + self.collectionView.frame.size.height * 0.5;
    // 遍历所以得布局属性
    for (UICollectionViewLayoutAttributes *attrs in array) {
     // 如果 不在屏幕上,直接跳过
        if (!CGRectIntersectsRect(visiableRect, attrs.frame))
            continue;
        // 每一个item 的中点X
        //CGFloat itemCenterX = attrs.center.x;
        CGFloat itemCenterY = attrs.center.y;;
        // 差距越小,缩放比例越大
        // 根据与屏幕最中间的距离计算缩放比例 ABS()绝对值  abx()整数绝对值
        CGFloat scale = 1 +  (1 - ABS(itemCenterY - centerY) / 300);
        attrs.transform =  CGAffineTransformMakeScale(scale,scale);
        
        
    }
    return array;
    
}


/**
*  用了设置collectionView 停止滚动那一刻的位置
* 
* @param proposedContentOffset 原本collectionView停止滚动那一刻的位置
* @param veloctiy              滚动速度
*/

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{
    
    // 计算出scrollView最后会停留的范围
    CGRect lastRect;
    lastRect.origin = proposedContentOffset;
    lastRect.size = self.collectionView.frame.size;
    
    // 计算屏幕最中间的x
    //CGFloat centerX = proposedContentOffset.x + self.collectionView.frame.size.width * 0.5;
        CGFloat centerY= proposedContentOffset.y + self.collectionView.frame.size.height * 0.5;
    // 取出这个范围内的所有属性
    NSArray *array = [self layoutAttributesForElementsInRect:lastRect];
    
    // 3 遍历所有属性
    CGFloat adjustOffsetX = MAXFLOAT;
    
    for (UICollectionViewLayoutAttributes *attrs in array) {
        
        if (ABS(attrs.center.y - centerY)< ABS(adjustOffsetX)) {
            adjustOffsetX = attrs.center.y - centerY;
        }
    }
    return CGPointMake(proposedContentOffset.x , proposedContentOffset.y+ adjustOffsetX);
}





























@end
